package packageDataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import packageException.AuteurException;
import packageException.DataException;
import packageModel.Auteur;

/**
 *
 * @author Lionel & Julien
 */
class AuteurSyllathequeData {
    /**
     * Récupère les informations correspondant à l'auteur dont l'id est passé en argument !
     * 
     * @param auteurId
     * @return
     * @throws AuteurException
     */
    public Auteur getAuteurById(int auteurId) throws 
            AuteurException,
            DataException {
        Auteur auteur = null;
        try {
            // Connexion à la base de données
            Context ctx = new InitialContext(); 
            DataSource source = (DataSource) ctx.lookup("jdbc/Syllatheque"); 
            Connection connexion = source.getConnection();
            
            // SQL
            String requeteSql = "SELECT * "
                    + "FROM Auteur "
                    + "WHERE auteurId = ? "
                    + "ORDER BY nom";
            
            // Traitement
            PreparedStatement prepStat = connexion.prepareStatement(requeteSql);
            prepStat.setInt(1, auteurId);

            ResultSet donnees = prepStat.executeQuery();
            donnees.next();
            
            auteur = new Auteur(
                        donnees.getInt("auteurId"), 
                        donnees.getString("nom"), 
                        donnees.getString("prenom")
                    );
            
            // Fermeture de la connexion
            connexion.close();
        }
        catch(SQLException e) {
            // ERREUR
            throw new AuteurException(e.getMessage());
        }
        catch(NamingException e) {
            // ERREUR
            throw new DataException(e.getMessage());
        }
        return auteur;
    }
    
}
